package cn.xiaosiyuan.util.logger;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.core.util.CharsetUtil;
import cn.xiaosiyuan.util.interfaces.ILogger;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Xkit jar包里面的全局日志
 *
 * 一般在调试接口
 * 会加网络是否可达的校验。然后写入日志
 *
 * 非线程安全（没有考虑过并发问题）
 *
 */
public class LoggerUtil implements ILogger {

    private String path = getPath();

    private String getPath() {
        // windows和linux下都可以用这个地址
        return System.getProperty("user.home") + "/log/xkit/xkitall.log";
    }


    public void info(String msg) {
        append("info" + "\t");
        append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\t");
        append(msg + "\n");
    }


    public void warning(String msg) {
        append("warning" + "\t");
        append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\t");
        append(msg + "\n");
    }

    public void error(String msg) {
        append("error" + "\t");
        append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\t");
        append(msg + "\n");
    }

    private void append(String str) {
        try {
            // 打印到日志文件的同时在控制台输出
            System.out.println(str);
            File file = getFile();
            FileWriter fileWriter = FileWriter.create(file, CharsetUtil.CHARSET_UTF_8);
            fileWriter.append(str);
        } catch (IORuntimeException e) {
            System.out.println("没有找到路径！");
        }
    }

    /**
     * 检查文件是否存在，不存在就新建
     */
    private File getFile() {
        return (FileUtil.exist(path)) ? new File(path) : FileUtil.newFile(path);
    }

}
